Os computadores não compreendem linguagens de programação diretamente; elas precisam ser convertidas para a linguagem de máquina, composta apenas por 0s e 1s (binário), que é a única linguagem que o computador entende. Para converter um código em linguagem de máquina, dependendo da linguagem de programação, é usado um processo que pode ser de compilação ou de interpretação.
Linguagens de programação compiladas são aquelas em que o código-fonte é traduzido para código de máquina antes da execução do programa. Esse processo é realizado por um compilador, um programa que analisa o código-fonte e o converte em instruções diretamente compreensíveis pela arquitetura da máquina alvo. Essa tradução antecipada permite que o programa seja executado com eficiência e rapidez, uma vez que as instruções já foram processadas e otimizadas antes da execução.
Por outro lado, linguagens de programação interpretadas não são traduzidas para código de máquina antes da execução. Em vez disso, um interpretador analisa o código-fonte linha por linha durante a execução do programa. Isso significa que cada vez que o programa é executado, o interpretador deve analisar e traduzir novamente o código-fonte para instruções compreensíveis pela máquina. Embora esse processo possa ser mais lento em comparação com a compilação, as linguagens interpretadas oferecem maior portabilidade, pois o mesmo código-fonte pode ser executado em diferentes sistemas operacionais e arquiteturas, desde que haja um interpretador disponível para a linguagem em questão.
Algumas linguagens, como Python e JavaScript (JS), usam uma abordagem intermediária entre compilação e interpretação. Nesses casos, o código-fonte é primeiro compilado para um formato de baixo nível chamado bytecode (imagem: arquivo de texto para arquivo de bytecode). O bytecode é uma representação binária das instruções que a máquina virtual específica da linguagem pode entender. Em seguida, a máquina virtual, é responsável por executar esse bytecode. Dessa forma, o código-fonte é traduzido apenas uma vez para bytecode e depois pode ser executado por diferentes máquinas virtuais em diferentes plataformas, proporcionando a portabilidade das linguagens interpretadas sem a necessidade de interpretar o código-fonte linha por linha repetidamente.
Bytecodes permitem aplicar a técnica de compilação Just-In-Time (JIT). A compilação JIT ocorre em tempo de execução, isto é, durante a execução do bytecode, em vez de ser realizada antecipadamente, como na compilação tradicional. Durante a execução, um compilador JIT analisa o bytecode e traduz partes do código em código de máquina otimizado para a arquitetura específica do computador em que está sendo executado. Esse código de máquina é armazenado em cache para reutilização em futuras execuções do mesmo trecho de código, evitando a necessidade de recompilação repetitiva.
A execução de partes específicas do código otimizado em código de máquina pode melhorar significativamente o desempenho em comparação com a interpretação linha por linha ou a execução de bytecode não compilado para código de máquina. A compilação JIT também permite que a linguagem de programação forneça uma combinação de portabilidade e eficiência, pois o mesmo código-fonte pode ser executado em diferentes plataformas, mas o compilador JIT pode gerar código de máquina otimizado para cada plataforma específica.
Para esse curso, utilizaremos a linguagem de programação Javascript. O Javascript... (falar sobre características da linguagem, sua popularidade, diversidade de produção, como websites, apps mobile e desktop, etc.
Como as páginas web utilizam HTML+CSS+JavaScript, um bom navegador web moderno já vem com o interpretador de JavaScript instalado. Para executar códigos JavaScript, acesse as Ferramentas do Desenvolvedor do teu navegador web de preferência (na maioria dos navegadores, o atalho é a tecla F12), e abra a aba "Console". Esta aba é um terminal interativo, onde os comandos podem ser inseridos e executados um de cada vez.
(Também gostaria de um parágrafo e um exemplo de código html+javascript para ilustrar a execução do javascript diretamente pelo navegador.)
Para desenvolver em Javascript, vamos utilizar os seguintes programas:
Node.js (node): O Ambiente de Execução (Runtime Enviroment) do Javascript, que é um kit com tudo que precisamos, como a máquina virtual e o compilador JIT, para desenvolver e executar nossos aplicativos. Assim, conseguimos desenvolver e executar JavaScript sem a necessidade de um navegador web. O Node.js vem com o Node Package manager (npm), que é uma ferramenta que permite baixar, instalar e gerenciar pacotes de terceiros. Pacotes de terceiros são projetos desenvolvidos por outros desenvolvedores e que podem ser adicionados ao nosso próprio projeto.
Git (git): Sistema de controle de versões de projetos. (fale um pouco mais sobre o git)
Visual Studio Code (vscode): Ambiente de Desenvolvimento Integrado (IDE) que integra recursos para escrever, depurar, compilar e gerenciar código em um único lugar. O vscode, além de ser um excelente editor de texto, integra o node e o git, que são programas de linha comando, para usar GUI. Além disso, o vscode é extensível, permitindo adicionar extensões (plugins) que ampliem sua funcionalidade.
Se você estiver no Windows, também vamos utilizar o seguinte programa:
Chocolatey (choco): Gerenciador de software do Windows. (fale mais sobre o chocolatey)
Para instalar os programas, sigamos os passos da seção correspondente ao nosso sistema operacional, seja Linux ou Windows, a seguir:
Por fazer
Siga uma das seguintes alternativas:
Execute o seguinte comando no terminal no modo administrativo:
Set-ExecutionPolicy RemoteSigned -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/pedrosiqueira/ifmsjs/refs/heads/main/scripts/01_windows_setup.ps1'))
Esse comando executa o script de instalação dos programas para desenvolvimento de Javascript. Se você ficou curioso, pode clicar nesse link e ver o que o script faz.
ou
Instale o Windows Subsystem for Linux (WSL): https://learn.microsoft.com/en-us/windows/wsl/install. Depois, siga o tutorial de instalação do NodeJS para Windows: https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl.
Uma vez que instalamos os programas necessários para desenvolver em Javascript, agora vamos configurá-los.
No caso do git, vamos definir um nome de usuário e email para salvar snapshots do progresso do nosso projeto. Como nosso projeto será hospedado no GitHub, você pode criar uma conta nesse site e usá-la para configurar o git.
No vscode, vamos instalar as seguintes extensões que nos ajudarão a desenvolver o projeto:
Também vamos trocar o npm pelo pnpm, que é uma alternativa mais rápida e leve do npm.
Para instalar os programas, sigamos os passos da seção correspondente ao nosso sistema operacional, seja Linux ou Windows, a seguir:
Para facilitar o processo de configuração dos programas, executemos no terminal (SEM o modo administrativo) um dos seguintes scripts conforme nosso sistema operacional:
por fazer
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/pedrosiqueira/ifmsjs/refs/heads/main/scripts/02_alg_project_setup.ps1'))
Além de configurar os programas, esses scripts também baixam o esqueleto inicial do nosso projeto do GitHub e o abrem no vscode.
Tudo pronto para começarmos!